// 从之前new操作 变成了 createStore方法生成store实例
// 其余vuex中的选项和之前学的没有任何变化
import { createStore } from 'vuex'
import cart from './modules/cart'
import user from './modules/user'
import category from './modules/category'
import createPersistedstate from 'vuex-persistedstate'

// ls -> cookie
// 1. 需求实现  2. 看官方文档  3.基础原理
/**
 storage: 插件开放给开发者自定义存储方法的接口
 在这个接口中需要我们按照要求配置三个方法：取 getItem 存 setItem  删 removeItem
 只要你提供了这三个固定的方法 数据的操作完全由开发者接手 存到哪里都可以

 基础原理：
 1. 通过mutation修改数据的时候配置的setItem方法会自动执行
 2. 当刷新操作初始化数据的时候 会自动执行getItem方法 getItem方法的返回值 会自动存入state

 接口设计：
 前端存储  localstorage  sessionStorage  cookie
 通用的接口  存 取 移除   setItem  getItem  removeItem
 */
export default createStore({
  strict: true, // 要求修改state中的数据只有一种方法必须提交mutation 否则会报错
  modules: {
    cart,
    user,
    category
  },
  plugins: [
    // 放入vuex的三方插件 插件是对于vuex本身功能增强
    createPersistedstate({
      key: 'erabbit-client-pc-store', // 存入本地时key
      paths: ['user', 'cart'] // 哪个模块要使用持久化的机制
    })
  ]
})
